¿Qué es AWS Lambda? Lo básico que debes saber

¿Haz escuchado acerca del concepto de serverless functions?

A veces también referido como serverless computing, es un concepto muy popular que se refiere a la opción de poder correr código “sin necesidad de un servidor”. Esta es la idea detrás de lo que AWS Lambda te ofrece.

AWS Lambda

Pero seamos sinceros, realmente no es que estes corriendo código sin un servidor, eso es una mentira. Lo que en verdad esta pasando es que el proveedor te está ahorrando la parte de la configuración y mantenimiento. Estás intercambiando control sobre el servidor por facilidad de uso. Esto es algo importante a considerar dado que si necesitas un control completo sobre el servidor probablemente no debas optar por una solución de este tipo.

Casos de uso

Lambda esta pensado para funcionalidad tipícamente asociada al back-end.
Algunos casos de uso básicos para los que se puede utilizar una Lambda:

  • Provisión de APIs
  • Lectura y escritura a base de datos
  • Lectura y escritura de archivos
  • Procesamiento de mensajes

Porsupuesto cada uno de estos casos de uso esta asociado a otro servicio de AWS, por lo que para usar una Lambda intrínsecamente necesitarás aprender acerca de los otros servicios que AWS ofrece. Dependiendo claro del caso de uso que quieras solucionar

Nota: Es importante que sepas que AWS Lambda no esta diseñado para que despliegues el front-end de tu aplicación. Para ese caso dentro del ecosistema de AWS, puedes optar por utilizar una instancia EC2, o incluso usar S3 en caso de que tu sito web sea estático.

¿Cuánto cuesta?

AWS Lambda no tiene un costo fijo, ya que se te cobra por cada función tomando en cuenta 3 factores:

  • Número de invocaciones
  • Duración de la función
  • Uso de memoria de la función

Esto quiere decir que siempre es mejor que intentes tener tu lógica dividida en múltiples funciones en lugar de intentar hacer lo más que puedas con una sola. De esta manera las partes de tu lógica que se usen menos frecuentemente tendrán la oportunidad de generar menores costos.

Si quieres ver ejemplos de costos de uso puedes revisar la página de AWS aquí.

No siempre será fácil estimar cuál es el uso exacto de una función sin tener datos históricos por lo qué puedes hacer uso de la capa grautita de AWS para averiguar el uso que pueden llegar a generar tus funciones. La capa de uso gratuita de AWS Lambda incluye un millón de solicitudes gratuitas al mes y 400 000 GB/segundos de tiempo de cómputo al mes.

No necesitas hacer nada para tener acceso a la capa de uso gratuita. Todos los usuarios tienen acceso a la misma por default.

¿Cómo empiezó?

El código de AWS Lambda debe estar orientado a realizar tareas específicas. Esto es porqué tienen un límite de uso por cada ejecución de 15 minutos.

Si este es tu caso sería bueno intentar dividir el proceso en varias funciones. No sólo para qué pueda correr la lógica de tu aplicativo en Lambda sino porque es buena práctica separar tu código en el mayor número de funciones posibles.

Esto permite un bajo acoplamiento entre las mismas lo cuál puede ayudar a realizar cambios modulares con mayor facilidad y a su vez permitirá diferenciar qué funciones se utilizan más en tu aplicación. Una vez haviendo diferenciado que funciones tienen mayor uso es más fácil también identificar que partes del sistema requieren optimización con mayor prioridad.

Veamos un ejemplo:

Supongamos que necesitas hacer una API basica para realizar operaciones CRUD sobre el inventario de una tienda de libros. Podemos dividir todo el trabajo en 3 secciones principales:

Configuración de los servicios

Para este ejemplo necesitarás al menos 3 servicios de AWS:

  • API Gateway para el API
  • RDS para la base de datos
  • Lambda para el procesamiento de datos

Nota: Porsupuesto está no es la única forma de lograr construir este sistema en AWS, puedes lograr también utilizando otros servicios como EC2. ECS, etc. Sin embargo si vas a utillizar Lambdas, definitivamente esta sería la forma ideal de hacerlo

La configuración de estos servicios involucra temas intrínsecos a cada uno como las rutas de accesso y el modelo de datos en el API y la base de datos respectivamente, pero también involucra temas de roles de acceso y permisos entre los mismos.

Estos temas los podremos ver más adelante en otro post.

Crear la lógica de la función

Los lenguajes de programación que puedes elegir para usar con AWS Lambda son:

  • Java
  • Go
  • PowerShell
  • Node.js
  • C#
  • Python
  • Ruby

Las funciones de Lambda tendrán que adaptar su comportamiento dependiendo del servicio que le provea las entradas y el servicio al que quieran proveer las salidas. En este caso API Gateway y RDS.

Para el ejemplo que estamos haciendo lo ideal sería crear una función por cada operación CRUD. Lo que quiere decir que nos quedaríamos con 4 funciones:

  • Crear un libro
  • Obtener un libro
  • Actualizar un libro
  • Borrar un libro

Desplegar cada función a AWS

Hay varias formas de subir el código a AWS.

Puedes hacer uso del CDK (Cloud Development Kit), o de un template de CloudFormation. Ambos son formas de desplegar código como infraestructura y sirven por sí quieres hacer la configuración de tus servicios de manera programática en vez de usar la interfaz de AWS.

Una segunda opción es utilizar AWS CLI, que no es otra cosa que la línea de comandos que AWS proporciona, en caso de que prefieras utilizar tu consola para ello.

La última opción es subir el código de manera manual empaquetandolo en un zip con la estructura delineda por AWS. Aunque dependiendo del lenguaje con el que estés programando (como Node.js o Python), AWS brinda un editor de código en línea para que puedas realizar los cambios directamente en la plataforma.


¡Listo!

Como ves desplegar una función en AWS no requiere de muchos pasos. Es evidente que no será tan rápido la primera vez, por la curva de aprendizaje de los demás servicios. Sin embargo una vez dominados estos temas es trivial realizar un despliegue de una función.

Si estás listo para empezar y quieres algo más técnico puedes revisar: Como crear una función de Lambda en AWS en 5 minutos